Conservation de l'ordre des données et ne demande pas de recherche complexe
La fonction
defsuite_croissante(t):"""
renvois la plus grande suite croissante d'un tableau non vide
donnee en entre: tableau d'entier
renvois: la taille de la plus grande suite croissante (int) et la suite en question (list)
"""assertlen(t)>0,"le tableau est vide"
compteur_final=0
compteur_comparer=0
j=0while j!=len(t):
pile1=PileDyna()for i inrange(j,len(t)):
pile1.empiler(t[i])
j+=1if i==len(t)-1:breakif t[i]>=t[i+1]:break
pile2= PileDyna()whilenot pile1.est_vide():
pile2.empiler(pile1.depiler())
compteur_comparer+=1if compteur_comparer>=compteur_final:
pile3= PileDyna()whilenot pile2.est_vide():
pile3.empiler(pile2.depiler())
compteur_final= compteur_comparer
compteur_comparer=0return compteur_final, pile3.afficher()
3 piles, 2 variables de type int et une boucle contenant une boucle de parcour, une boucle de création de la pile2 et potentiellement une boucle de création de la pile3.
La fonction prend comme arguments: un tableau d'entier et renvois la pile numéro 3 contenant la plus grande suite croissante
Renvois seulement la dernière plus grande suite croissante du tableau et c'est une fonction en O(n²)
Le bloc des tests
if"__main__"== __name__:defcree_tableau():
tab=[]for i inrange(40):
tab.append(randint(0,10))return tab
tableau1=[0,1,2,1,3,2]
tableau2=[1,2,1,3]
tableau3=[1,2,3]
tableau4=[]print(suite_croissante(tableau1))print(suite_croissante(tableau2))print(suite_croissante(tableau3))
tab1= cree_tableau()print(tab1)print(suite_croissante(tab1))print(suite_croissante(tableau4))#test du assert
4 tableaux définits,
une fonction qui créé un tableau aléatoire,
un affichage du tableau aléatoire,
5 appels et affichages de la fonction principal.